/****************************************************************
 *This file is hitmc_disk_space.c
 ****************************************************************/

#include "include.h"

/****************************************************************
 *This create_time_buffer
 *	(1)create_time_buffer
 ****************************************************************/
void create_time_buffer(unsigned char *time_buf_p)
{
    time_t		now ;
    struct		tm *tm_now ;
	ViChar		time_buf[60];

    // 清空局部变量
    memset(time_buf, 0x0, sizeof(time_buf));

    // 获取本机时间
    time(&now) ;
    tm_now = localtime(&now) ;

    // 获取生成日志文件名中的时间部分
    sprintf(time_buf, "%d_%d_%d_%d_%d_%d", tm_now->tm_year+1900, tm_now->tm_mon+1, tm_now->tm_mday, tm_now->tm_hour, tm_now->tm_min, tm_now->tm_sec);

    // 将时间信息复制到缓冲区中
    strcat((ViChar *)time_buf_p, time_buf);
    strcat((ViChar *)time_buf_p, "------");
}

/****************************************************************
 *This get_disk_left_space
 *	(1)get_disk_left_space
 ****************************************************************/
unsigned int get_disk_left_space(unsigned char *file_path)
{
	// 获取卸载数据盘的使用情况
	struct statfs diskInfo;

    //每个block里包含的字节数、总的字节数、剩余空间的大小和可用空间大小
    unsigned long long blocksize, totalsize, \
                       freeDisk, availableDisk, \
                       unusedDisk, usedDisk;	

    // 获取存储卸载数据的磁盘空间大小
    statfs((const char *)file_path, &diskInfo);
    //statfs("/", &diskInfo);

    //每个block里包含的字节数
    blocksize = diskInfo.f_bsize;	

    //总的字节数，f_blocks为block的数目
    totalsize = blocksize * diskInfo.f_blocks;

    //剩余空间的大小
    freeDisk = diskInfo.f_bfree * blocksize;

    //可用空间大小
    availableDisk = diskInfo.f_bavail * blocksize;

    //不可用空间
    unusedDisk = freeDisk - availableDisk;

    // 计算已使用空间
    usedDisk = totalsize - unusedDisk - availableDisk;	

    // 换算成MByte
    availableDisk >>= 20;
    usedDisk >>= 20;
    unusedDisk >>= 20;

    return (unsigned int)(availableDisk & 0xffffffff);
}

/****************************************************************
 *This get_disk_use_space
 *	(1)get_disk_use_space
 ****************************************************************/
unsigned int get_disk_use_space(unsigned char *file_path)
{
	// 获取卸载数据盘的使用情况
	struct statfs diskInfo;

    //每个block里包含的字节数、总的字节数、剩余空间的大小和可用空间大小
    unsigned long long blocksize, totalsize, \
                       freeDisk, availableDisk, \
                       unusedDisk, usedDisk;	

    // 获取存储卸载数据的磁盘空间大小
    statfs((const char *)file_path, &diskInfo);
    //statfs("/", &diskInfo);

    //每个block里包含的字节数
    blocksize = diskInfo.f_bsize;	

    //总的字节数，f_blocks为block的数目
    totalsize = blocksize * diskInfo.f_blocks;

    //剩余空间的大小
    freeDisk = diskInfo.f_bfree * blocksize;

    //可用空间大小
    availableDisk = diskInfo.f_bavail * blocksize;

    //不可用空间
    unusedDisk = freeDisk - availableDisk;

    // 计算已使用空间
    usedDisk = totalsize - unusedDisk - availableDisk;	

    // 换算成MByte
    availableDisk >>= 20;
    usedDisk >>= 20;
    unusedDisk >>= 20;

    return (unsigned int)(usedDisk & 0xffffffff);
}

/****************************************************************
 *This get_disk_all_space
 *	(1)get_disk_all_space
 ****************************************************************/
unsigned int get_disk_all_space(unsigned char *file_path)
{
	// 获取卸载数据盘的使用情况
	struct statfs diskInfo;

    //每个block里包含的字节数、总的字节数、剩余空间的大小和可用空间大小
    unsigned long long blocksize, totalsize;	

    // 获取存储卸载数据的磁盘空间大小
    statfs((const char *)file_path, &diskInfo);
    //statfs("/", &diskInfo);

    //每个block里包含的字节数
    blocksize = diskInfo.f_bsize;	

    //总的字节数，f_blocks为block的数目
    totalsize = blocksize * diskInfo.f_blocks;

    // 换算成MByte
    totalsize >>= 20;

    return (unsigned int)(totalsize & 0xffffffff);
}